1. Field of Invention
The present invention relates generally to mass digital data storage systems. More particularly, the present invention relates to systems and methods for automatically performing symbol or state frequency leveling in a storage system such that performance goals are efficiently met when storing substantially any data pattern in a storage system.
2. Description of the Related Art
The use of non-volatile memory systems such as flash memory storage systems is increasing due to the compact physical size of such memory systems, and the ability for non-volatile memory to be repetitively reprogrammed. The compact physical size of flash memory storage systems facilitates the use of such storage systems in devices which are becoming increasingly prevalent. Devices which use flash memory storage systems include, but are not limited to, digital cameras, digital camcorders, digital music players, handheld personal computers, and global positioning devices. The ability to repetitively reprogram non-volatile memory included in flash memory storage systems enables flash memory storage systems to be used and reused.
Data sets that are stored in a data block of a non-volatile memory system may have substantially any possible combination of data values. A data block which contains “N” symbols that may each be stored as one of “m” possible values may have “mN” possible data values. By allowing for all possible data values to be stored in a data block, a storage system is typically designed in such a way that it meets performance goals for all possible values, which may not be optimal for the most commonly stored data patterns. That is, in order to ensure that performance requirements may be met for all possible data values or patterns, including less preferred cases or cases which are not likely to occur, the performance associated with the most common, or preferred, data values may be compromised. Allowing for all possible data values to be stored in a data block of a storage system may also lead to relatively complicated design issues, increased reliability issues, a higher power consumption, and a higher cost.
The number of data patterns which may possibly be stored in a data block may be relatively high. Even when substantially only binary states may be stored in a data block, the number of data patterns which may potentially be stored in the data block is substantial. For a data block which may store one hundred binary bits, there are effectively 2100 data patterns or cases which the data block is arranged to store. The requirements of a storage system which stores the one hundred binary bits is set by, e.g., limited by, a small number of less preferred cases which may require dedicated circuitry to meet minimum performance requirements, or may consume additional power. By way of example, in some systems, storing one hundred binary bits as “1” may be a less preferred case which requires a more expensive storage system than is required by more preferred cases which involve the storage of one hundred binary bits with a mix of “1” and “0” values. Alternatively, a storage system which meets minimum performance requirements when storing less preferred, or rare, cases may compromise the performance level associated with storing more preferred cases. Compromising the performance level associated with storing preferred cases such that minimum performance requirements associated with storing less preferred cases may be met often proves to be inefficient.
In addition to or in lieu of potentially causing a compromise in performance, allowing for all possible data values to be stored in a data block of a storage system often results in higher production costs as the circuitry associated with storing all possible data values may be high. Such circuitry may also require the consumption of a relatively high amount of power. A storage system that stores all possible data values is also likely to be less reliable with respect to both the storage of data and the inclusion of additional circuitry to accommodate the storage of less preferred cases. The need to store all possible data values may also lead to increased development time due to design issues associated with designing circuitry for a storage system that enables all possible data values to be stored which, in turn, may lead to a longer lead time before the storage system is marketable.
Therefore, what is desired is a system which enables less preferred cases to be efficiently stored in non-volatile memory substantially without compromising the performance associated with storing preferred cases. That is, what is needed is a method and an apparatus which effectively enables both less preferred cases and preferred cases to be stored.